Γεια σας και χαρά σας !!!
Θέλω να δουλέψω με XML για να κάνω κάποιο update σε δύο related (Parent - Child) πίνακες στον SQL Server(2000)
Τρέχω το εξής procedure :
CREATE PROCEDURE UpdateXML
@Parent ntext
AS
DECLARE @XMLHandler int, @ParentID bigint
EXEC sp_xml_preparedocument @XMLHandler output, @Parent
IF @@Error<>0
BEGIN
SELECT -1
RETURN
END
BEGIN TRANSACTION
SET @ParentID=(SELECT PId
FROM OpenXML(@XMLHandler,'/Parent',1)
WITH (PId bigint))
IF @@Error<>0
BEGIN
ROLLBACK TRANSACTION
SELECT -2
RETURN
END
UPDATE tblChildren
SET
Name = Cname
FROM OpenXML(@XMLHandler,'/Parent/Child',1)
WITH (Cid bigint, Cname nvarchar(50))
WHERE ParentId = @ParentId AND
Id=Cid
IF @@Error<>0
BEGIN
ROLLBACK TRANSACTION
SELECT -3
RETURN
END
COMMIT TRANSACTION
exec sp_xml_removedocument @XMLHandler
GO
έτσι για παράδειγμα :
uSE [tEST dATABASE]
exec dbo.UpdateXML '<Parent PId="2">
<Child Cname="TESTAdRA1" Cid="6"/>
<Child Cname="TESdTARA2" Cid="7"/>
<Child Cname="TESxTARA3" Cid="8"/>
<Child Cname="TEScTARA4" Cid="9"/>
<Child Cname="TESTxARA5" Cid="10"/>
</Parent>'
και δουλεύει μια χαρά ...
Πως θα κάνω όμως handle το concurrency;(έχω προσθέσει timestamps και θα ήθελα το update να γίνεται rollback αν οποιοδήποτε πχ child rec έχει διαφοροποιηθεί από αυτό που πήρα πριν το update)
Πάνος Αβραμίδης